﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Flighttracker
{
    public class Vlucht : ISearchable
    {
        public Luchtvaartmaatschappij Luchtvaartmaatschappij { get; private set; }
        public string LVM { get { return Luchtvaartmaatschappij.Naam; } }
        public string Vluchtnummer { get; private set; }
        public int GeschatteReistijd { get; set; }
        public int GeschatteAfstand { get; set; }
        public DateTime GeplandeVertrektijd { get; private set; }
        public DateTime GeplandeAankomsttijd { get { return GeplandeVertrektijd.AddMinutes(GeschatteReistijd); } }
        public Luchthaven VertrekLocatie { get; private set; }
        public string Vertrek { get { return VertrekLocatie.Naam; } }
        public Luchthaven AankomstLocatie { get; private set; }
        public string Aankomst { get { return AankomstLocatie.Naam; } }
        public VluchtSoort VluchtSoort { get; private set; } 
        public Vlucht AansluitendeVlucht { get; private set; }
        public Vliegtuig Vliegtuig { get; private set; }
        public List<Vluchtstatus> StatusList { get; private set; }
        public List<PilootInzet> InzetList { get; private set; }
        public List<Baangebruik> BaangebruikList { get; private set; }

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="luchtvaartmaatschappij"></param>
        /// <param name="vluchtnummer"></param>
        /// <param name="vliegtuig"></param>
        /// <param name="gesch_Reistijd"></param>
        /// <param name="gesch_Afstand"></param>
        /// <param name="gepl_Vertrek"></param>
        /// <param name="vluchtsoort"></param>
        /// <param name="Aansl_Vlucht"></param>
        public Vlucht(Luchtvaartmaatschappij luchtvaartmaatschappij, string vluchtnummer, Vliegtuig vliegtuig, int gesch_Reistijd,
            int gesch_Afstand, DateTime gepl_Vertrek, VluchtSoort vluchtsoort, Vlucht Aansl_Vlucht)
        {
            this.Luchtvaartmaatschappij = luchtvaartmaatschappij;
            this.Vluchtnummer = vluchtnummer;
            this.Vliegtuig = Vliegtuig;
            this.GeschatteReistijd = gesch_Reistijd;
            this.GeschatteAfstand = gesch_Afstand;
            this.GeplandeVertrektijd = gepl_Vertrek;
            this.VluchtSoort = vluchtsoort;
            this.AansluitendeVlucht = Aansl_Vlucht;

            StatusList = new List<Vluchtstatus>();
            InzetList = new List<PilootInzet>();
            BaangebruikList = new List<Baangebruik>();
        }

        public Vlucht(List<string> stringList)
        {
            Vluchtnummer = stringList[0];
            Luchtvaartmaatschappij = (Luchtvaartmaatschappij)Flighttracker.Instance.ZoekObject(stringList[1]);
            Luchtvaartmaatschappij.VoegVluchtToe(this);
            Vliegtuig = (Vliegtuig)Flighttracker.Instance.ZoekObject(stringList[2]);
            Vliegtuig.VoegVluchtToe(this);
            GeschatteReistijd = Convert.ToInt32(stringList[3]);
            GeschatteAfstand = Convert.ToInt32(stringList[4]);
            GeplandeVertrektijd = DateTime.ParseExact(stringList[5], "d-M-yyyy H:mm:ss", System.Globalization.CultureInfo.InvariantCulture);
            VertrekLocatie = (Luchthaven)Flighttracker.Instance.ZoekObject(stringList[7]);
            VertrekLocatie.VoegVluchtToe(this);
            AankomstLocatie = (Luchthaven)Flighttracker.Instance.ZoekObject(stringList[8]);
            AankomstLocatie.VoegVluchtToe(this);
            if (String.Equals(stringList[9], "PASSAGIERSVLUCHT", StringComparison.CurrentCultureIgnoreCase)) { VluchtSoort = VluchtSoort.Passagiersvlucht; }
            else if (String.Equals(stringList[9], "VRACHTVLUCHT", StringComparison.CurrentCultureIgnoreCase)) { VluchtSoort = VluchtSoort.Vrachtvlucht; }
            if (stringList[10] != "null") AansluitendeVlucht = (Vlucht)Flighttracker.Instance.ZoekObject(stringList[10]);

            StatusList = new List<Vluchtstatus>();
            InzetList = new List<PilootInzet>();
            BaangebruikList = new List<Baangebruik>();
        }

        /// <summary>
        /// Voegt een baangebruik object toe aan de lijst.
        /// </summary>
        /// <param name="baangebruik"></param>
        public void VoegBaangebruikToe(Baangebruik baangebruik)
        {
            this.BaangebruikList.Add(baangebruik);
        }

        /// <summary>
        /// Voegt een pilootinzet object toe aan de lijst.
        /// </summary>
        /// <param name="hoofdpiloot"></param>
        /// <param name="copiloot"></param>
        public void VoegPilootInzetToe(PilootInzet pilootInzet)
        {
            this.InzetList.Add(pilootInzet);
        }

        /// <summary>
        /// Voegt een vluchtstatus object toe aan de lijst.
        /// </summary>
        /// <param name="vluchtstatus"></param>
        public void VoegVluchtstatusToe(Vluchtstatus vluchtstatus)
        {
            this.StatusList.Add(vluchtstatus);
        }

        /// <summary>
        /// Geeft de lijst terug van alle vluchten.
        /// </summary>
        /// <returns></returns>
        public List<Vluchtstatus> ToonAlleVluchtstatussen()
        {
            return this.StatusList;
        }

        public bool ZoekUniekID(string id)
        {
            if (Vluchtnummer == id)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }
}